Felsorolom a Web Service névjegyeit, és megjelenítem a névjegyek 'szakaszos' tableView-ban, a képernyőképen látható módon. A probléma az, hogy ugyanazokat a címkeértékeket kapom az A szakasz és az S szakasz első sorának jelölőnégyzeteihez. Rendeztem egy tömböt és megjelenítettem az indexelt táblázat nézetében. Hogyan lehet különböző indexértékeket kapni az indexPath.row függvényében, a megjelenített szakaszok számától függetlenül. Itt próbálkoztam A cellForRowAtIndexPath fájlban: UIButton * checkBox; if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone) { checkBox = [[UIButton kiosztás] initWithFrame: CGRectMake (7, 8, 30, 30)]; } más { checkBox = [[UIButton kiosztás] initWithFrame: CGRectMake (15, 13, 30, 30)]; } // int cnt = 0; // for (int i = indexPath.section - 1; i> 0; i--) // { // cnt + = [[objectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: i]] szám]; // az arrayOfCharachters karaktere "A" - "Z" //} //checkBox.tag = cnt + indexPath.row; [checkBox setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal]; [checkBox addTarget: self action: @selector (checkBoxClicked :) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; visszatérő cella; } - (void) checkBoxClicked: (id) küldő { CGPoint buttonPosition = [küldő convertPoint: CGPointZero toView: self.tableViewContact]; NSIndexPath * indexPath = [self.tableViewContact indexPathForRowAtPoint: buttonPosition]; UIButton * tappedButton = (UIButton *) küldő; NSLog (@ "Címke száma =% d", [küldő címke]); IF { [sender setImage: [UIImage imageNamed: @ "checkBoxMarked.png"] forState: UIControlStateNormal]; if (indexPath! = Nil) { NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; // a jelölőnégyzetek azonosítóit tárolja a mutableArrayOfIds fájlban NSLog (@ "Címkézett ellenőrzött gomb id =% @", finalIntId); [arrayOfIds addObject: finalIntId]; } // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: tappedButton.tag]; // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; } más { [sender setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal]; NSLog (@ "Ellenőrizetlen"); // [arrayOfIds removeObjectAtIndex: tappedButton.tag]; } } - (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) szakasz { ha ([[arrayOfCharacters szám] == 0) { Visszatérés @""; } return [NSString stringWithFormat: @ "% @", [arrayOfCharacters objectAtIndex: szakasz]]; } - (NSArray *) szakaszIndexTitlesForTableView: (UITableView *) tableView { NSArray * toBeReturned = [NSArray arrayWithArray: [@ "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | # " componentsSeparatedByString: @ "|"]]; return toBeReturned; } - (NSInteger) tableView: (UITableView *) tableView sectionForSectionIndexTitle: (NSString *) title atIndex: (NSInteger) index { NSI egész szám = 0; for (NSString * karakter az arrayOfCharactersben) { if ([karakter isEqualToString: cím]) { visszatérés száma; } szám ++; } visszatér 0; } - [NSInteger] numberOfSectionsInTableView: (UITableView *) tableView { return [arrayOfCharacters szám]; // return 1; } - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) szakasz { // return [mutableArray count]; return [[objectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: szakasz]] count]; }
2020-12-07 22:54:21
ugyanazt a címke értéket állítja be minden szakaszhoz, amelynek azonos sora van. Az indexPath két tulajdonsággal rendelkezik: {section, row}. Mondjuk, hogy az A szakasznak két sora van, az 1. sorhoz -> indexPath.section = 0, indexPath.row = 0; a 2. sorhoz-> indexPath.section = 0, indexPath.row = 1; Mondjuk, hogy az S szakasznak két sora van, az 1. sorhoz -> indexPath.section = 1, indexPath.row = 0; a 2. sorhoz-> indexPath.section = 1, indexPath.row = 1; Tehát az A szakasz 1. sorához és az S szakasz 1. sorához ugyanazt a címke értéket állítja be, amely 0. A probléma merül fel. Próbálja meg beállítani a címke értékét az alábbiak szerint. button.tag = indexPath.section * 1000 + indexPath.row; a szakasz és a sor lekérésekor, NSInteger szakasz = (button.tag) / 1000; NSInteger sor = (button.tag)% 1000; | Próbáld ezt... - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { statikus NSString * CellIdentifier = @ "Cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cella == nulla) { cella = [[UITableViewCell allokáció] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } UIButton * checkBox = [[UIButton allokálás] initWithFrame: CGRectMake (280, 10, 50, 44)]; checkBox.backgroundColor = [UIColor orangeColor]; [checkBox addTarget: self action: @selector (checkBoxClicked: event:) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; visszatérő cella; } - (void) checkBoxClicked: (id) küldő esemény: (id) esemény { NSSet * touches = [esemény allTouches]; UITouch * touch = [bármilyen objektumot megérint]; CGPoint currentTouchPosition = [touch locationInView: self.tv]; // itt a tv a TableView Object NSIndexPath * indexPath = [self.tv indexPathForRowAtPoint: currentTouchPosition]; NSLog (@ "az indePath.section% d értéke, indexPath.row% d", indexPath.section, indexPath.row); } | Ez azért történik, mert címkét rendel a SZEKCIÓK független gombokhoz. Az A & S szakaszok első sorának mindkét sora = 0. Tehát a megfelelő gombhoz hozzárendelt címke 0. Kiosztania kell őket, a szekciókra hivatkozva. azt javaslom, hogy rendelje hozzá az akadálymentességet vesszővel elválasztott formával, amely a szakasz, sort tartalmazza. És a módszeredben - (void) checkBoxClicked: (id) küldő { // vesszővel elválasztott formából válassza ki a karakterláncot. Az 1. a szakasz, a második a sor. } a második lehetőség: Csináld bármit, amit csinálsz, és hajtsd végre a Button módszerét. CGPoint buttonPosition = [küldő convertPoint: CGPointZero toView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: buttonPosition]; if (indexPath! = nulla) { ... az indexpath.section az Ön szakasza, az index path.row pedig a sora. } Van harmadik lehetőség is. a cellforRowAtIndexpath programban rendelje hozzá a gombjának a címet - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath [btn setTitle: <# Your Row #> forState: UIControlStateDisabled]; [btn setTag <#A szakasz #>]; így a gombmódszerben történő fogadáskor rendelkezhet mind a Szakasszal (Címke), mind a Sorral (Cím fogyatékkal élőknek). - (void) checkBoxClicked: (id) küldő {[button titleForState: UIControlStateDisabled]; // a sorod button.tag // szakasza} | Próbáld ezt! Minden szakasz ismerheti a jobb oldali szakaszok számát, majd adja hozzá az egyes sorok számát. [[fieldTitlesList objectAtIndex: indexPath.section - 1] szám] + indexPath.row A fieldTitlesList a szakaszok tömbje. | Hozzáadtam a következő kódot, amely megoldotta a problémámat NSIinteger rowNumber = 0; for (NSInteger i = 0; i